Implementace funkce Random?
Otázka od: Petr Brant
29. 10. 2002 12:46
Subject: Implementace funkce Random?
Ahoj, nevite nekdo, jak je implementovana funkce Random? Potrebuji generovat
reprodukovatelnou radu pseudonahodnych cisel a v helpu je
"Because the
implementation of the Random function may change between compiler versions,
we do not recommend using Random for encryption or other purposes that
require reproducible sequences of pseudo-random numbers".
Tak abych se
vyhnul pripadnym problemum.
Zdravim
RNDr. Petr Brant [brant@dcomm.cz]
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234
Odpovedá: Jakub Dusek
29. 10. 2002 14:37
No ten help nelze Opravdu se to mezi verzemi (tusim 3 a 4) zmenilo
a nikdo nezarucuje ze se to nestane znovu. Na pseudonahodna cisla je
tedy zrejme potreba pouzit vlastni rutinu, jinak se to pri upgradu,
teoreticky i pri instalaci update packu, a rekompilaci rozhodi...
Jakub Dusek
-------------------------------------------
Homepage : http://dusek.webz.cz
Phone : +420604615795
Sms email : jakub.dusek@click.cz
ICQ: 86063232
Apps : Add/Remove Manager, Charmaper,
Sms GateKeeper
-------------------------------------------
Tuesday, October 29, 2002, 11:28:29 AM, you wrote:
PB> Ahoj, nevite nekdo, jak je implementovana funkce Random? Potrebuji
generovat
PB> reprodukovatelnou radu pseudonahodnych cisel a v helpu je
"Because the
PB> implementation of the Random function may change between compiler versions,
PB> we do not recommend using Random for encryption or other purposes that
PB> require reproducible sequences of pseudo-random numbers".
Tak abych se
PB> vyhnul pripadnym problemum.
PB> Zdravim
PB> RNDr. Petr Brant [brant@dcomm.cz]
PB> D&COMM s.r.o.
PB> Korunovační 6
PB> Praha 7
PB> tel. +420724007234
Odpovedá: Petr Fejfar
29. 10. 2002 12:56
From: "Petr Brant" <brant@dcomm.cz>
> Ahoj, nevite nekdo, jak je implementovana funkce
> Random?
Podivej se do Source\Rtl\Sys\system.pas na funkci
_RandInt
HTH, pf
Odpovedá: Petr Brant
29. 10. 2002 15:09
Diky, podival jsem se, ale je to procedura, ktera nic nevraci. Krome toho je
to v assembleru, takze netusim, co to vlastne dela, abych si to prepsal.
Zdravim
RNDr. Petr Brant [brant@dcomm.cz]
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234
Subject: Re: Implementace funkce Random?
> Ahoj, nevite nekdo, jak je implementovana funkce
> Random?
Podivej se do Source\Rtl\Sys\system.pas na funkci
_RandInt
Odpovedá: David Janko
29. 10. 2002 15:19
Ahoj,
v "davnych" dobach kdyz jsem jeste venoval cryptografii sem vytvarel
generatory pseudonahodnych cisel, ty zakladni funkce nejsou slozite - mohli
by vam pomoci.
Nize je kod testujici myslim algoritmus X^2 mod N (gcc linux, ale myslim ze
to prelozite vsude).
At se dari
---
Best Regards,
David Janko
programmer & Linux system administrator
djanko@infoware.cz
+420 604 164 999
/* test vyrovnanosti hodnot pseudo-random generatoru */
#include <stdio.h>
#include <math.h>
#include <time.h>
#define ANO 1
#define NE 0
void main(void) {
long int x, cykly, i, y, N;
int tisk;
double faktor, soucet=0;
time_t start, end;
printf("init:");
scanf("%d", &x);
printf("pocet cyklu:");
scanf("%d", &cykly);
printf("N:");
scanf("%d", &N);
printf("\nmezivypis ? (0||1):");
scanf("%d", &tisk);
start = clock();
for(i=0; i< cykly; i++) {
y=(long int) fmod((fmod((double) x, (double)N) * fmod((double) x,
(double) N)), (double) N);
x=y;
soucet+=y;
if (tisk == ANO) printf("\n%d", y);
}
end = clock();
faktor = ( soucet / (double) cykly) - (((double)N - 1) / 2);
//printf("soucet:%lf\n", soucet);
//printf("cykly:%d\n", cykly);
printf("\n\nPrumerovy faktor:\t%lf\n", faktor);
printf("\nCas vypoctu %d hodnot:\t%f [s]\n", cykly, (end-start) / (double)
CLOCKS_PER_SEC);
}
Ahoj, nevite nekdo, jak je implementovana funkce Random? Potrebuji generovat
reprodukovatelnou radu pseudonahodnych cisel a v helpu je
"Because the
implementation of the Random function may change between compiler versions,
we do not recommend using Random for encryption or other purposes that
require reproducible sequences of pseudo-random numbers".
Tak abych se
vyhnul pripadnym problemum.
Odpovedá: Petr Fejfar
29. 10. 2002 23:36
From: "Petr Brant" <brant@dcomm.cz>
> Diky, podival jsem se, ale je to procedura,
> ktera nic nevraci.
:-O A co myslis, ze znamena komentar v zahlavi
<- EAX Result
Na osvetleni bych doporucoval precist si kapitolu Program Control v Object
Pascal Language Guide
popr. si najit v helpu topic
Program Control | Function Results.
***
> Krome toho je to v assembleru, takze netusim,
> co to vlastne dela, abych si to prepsal.
V podstate toto (necht Seed je staticka promenna
typu integer, inicializovana na nejakou pocatecni
hodnotu, standardne 0, Randomize do ni strci
v podstate cas):
Seed := Seed*$08088405+1;
Result := int64(aRange)*int64(Seed) div $100000000;
Takova transcripce ale fungovat nebude, protoze shitoidni prascal neumi
unsigned 64 bitove operace.
Takze nejjednodussi to bude vzit, jak to je:
function RandomInteger(aRange:integer): integer;
asm
IMUL EDX,[Seed],08088405H
INC EDX
MOV [Seed],EDX
MUL EAX,EDX
MOV EAX,EDX
end;
HTH, pf